package cmctx

import (
	"context"
	"fmt"
)

const (
	ctxLogEntry    = "ctx_log_entry"
	ctxSessionUser = "ctx_session_user"
	ctxRequestId   = "ctx_request_id"
	ctxUserId      = "ctx_user_id"
)

func SetCtxRequestId(ctx context.Context, requestId string) context.Context {
	return context.WithValue(ctx, ctxRequestId, requestId)
}

func GetCtxRequestId(ctx context.Context) string {
	if ctx == nil {
		return ""
	}

	requestId, ok := ctx.Value(ctxRequestId).(string)
	if ok {
		return requestId
	}
	return ""
}

func SetCtxUserId(ctx context.Context, val uint) context.Context {
	return context.WithValue(ctx, ctxUserId, val)
}

func GetCtxUserId(ctx context.Context) uint {
	userId, ok := ctx.Value(ctxUserId).(uint)
	if ok {
		return userId
	}
	return 0
}

func FormatCtxRequestId(ctx context.Context) string {
	if ctx == nil {
		return ""
	}

	return fmt.Sprintf("%s#%s", ctxRequestId, GetCtxRequestId(ctx))
}
